package main

import (
	"fmt"
)

func Maps(a map[int]string)  {
	a[3] = "aaaa"
}

func main()  {
	//声明一个map类型的变量
	var a map[int]string
	fmt.Println(a)
	fmt.Println("a len =", len(a))

	//自动推导类型,可以指定长度，也可以不写
	//需要注意的是map只有长度没有容量
	//设置了长度不去赋值，长度还是0，长度会随着map里的元素增加而增加
	//如果设置的key是相同的，下边key对应的值会覆盖上边的
	//如果长度超出了设置的长度，他的长度会随之增加
	b := make(map[int]string, 3)
	fmt.Println(b)
	fmt.Println("b len =", len(b))
	b[1]="aaa"
	b[2]="bbb"
	b[2]="ccc"
	b[3]="ddd"
	b[4]="eee"
	fmt.Println(b)
	fmt.Println("b len =", len(b))

	//初始化map
	c := map[int]string{1:"make", 2:"c++", 3:"go"}
	fmt.Println(c)
	fmt.Println("c len =", len(c))

	//遍历map
	for key, val := range c{
		fmt.Printf("c[%d] = %s\n", key, val)
	}

	//删除map的值
	delete(c, 1)
	fmt.Println(c)
	fmt.Println("c len =", len(c))

	//判断一个值是否存在
	//val 是key 对应的值(在key存在的情况下)
	//ok 返回的true或者false
	val, ok := c[5]
	if ok == false {
		fmt.Println("值不存在")
	} else {
		fmt.Println("值存在，结果为 ", val)
	}

	//在函数里作为参数使用时，时作为引用传递的
	Maps(c)
	fmt.Println(c)
	fmt.Println("c len =", len(c))

}
